var Org = Ext.data.Record.create([{
			name : 'id',
			mapping : 'id',
			type : 'int'
		}, {
			name : 'name',
			mapping : 'name',
			type : 'string'
		}, {
			name : 'orgType',
			mapping : 'orgType',
			type : 'string'
		}, {
			name : 'parentId',
			mapping : 'parentId',
			type : 'int'
		}, {}, {
			name : 'orgLevel',
			mapping : 'orgLevel',
			type : 'int'
		}, {
			name : 'orgOrder',
			mapping : 'orgOrder',
			type : 'int'
		}, {
			name : 'isLeaf',
			mapping : 'isLeaf',
			type : 'string'
		}, {
			name : 'fullIdPath',
			mapping : 'fullIdPath',
			type : 'string'
		}, {
			name : 'fullNamePath',
			mapping : 'fullNamePath',
			type : 'string'
		}, {
			name : 'memo',
			mapping : 'memo',
			type : 'string'
		}]);
/*
 * var ds_company_select = new Ext.data.Store({ url :
 * 'findAllCompanyName.action', reader : new Ext.data.JsonReader({ root : 'root' }, [{
 * name : 'companyId', type : 'int' }, { name : 'companyName', type : 'string'
 * }]) });
 */
var ds_org_select = new Ext.data.Store({
			url : '/supervise/sys/org/findAllCompanyName.action',
			reader : new Ext.data.JsonReader({
						root : 'root'
					}, [{
								name : 'companyId',
								type : 'int'
							}, {
								name : 'companyName',
								type : 'string'
							}])
		});
var sm = new Ext.grid.CheckboxSelectionModel({
			header : 'chk',
			width : 30,
			dataIndex : 'chk'
		});
var cm_org = new Ext.grid.ColumnModel([new Ext.grid.CheckboxSelectionModel(),
		new Ext.grid.RowNumberer({header : '序号', width : 40}), {
			header : '部门名称',
			width : 90,
			dataIndex : 'name',
			sortable : true,
			editor : new Ext.form.TextField({
						allowBlank : false,
						maxLength : 50
					})
		},/*
			 * { header : '上级部门ID', width : 90, sortable : true, dataIndex :
			 * 'parentId', editor : new Ext.form.ComboBox({ store :
			 * ds_company_select, displayField : 'parentId', valueField :
			 * 'parentId', mode : 'remote', allowBlank : false, editable :
			 * false, triggerAction : 'all', listWidth : 130, //
			 * 因为列宽度默认比较小,所以设定下拉列表宽度 listeners : { 'select' : function(combo,
			 * record, index) { parentId = record.data.parentId; //
			 * 获得分公司id,保存到全局 } } }) },
			 */{
			header : '部门类型',
			width : 200,
			dataIndex : 'orgType',
			menuDisabled : true,
			/*
			editor : new Ext.form.TextField({
						maxLength : 70
					}),
					*/
			renderer : function(v) {
				var ret = '';
				switch (v) {
					case 'unit' :
						ret = '垂直管理单位';
						break
					case 'dept' :
						ret = '机关';
						break
					case 'town' :
						ret = '乡镇';
						break
					case 'project' :
						ret = '工业园区管委会和工程建设指挥部';
						break
					default :

				}
				return ret;
			}

		}, {
			header : '部门排序',
			width : 200,
			dataIndex : 'orgOrder',
			menuDisabled : true,
			editor : new Ext.form.TextField({
						maxLength : 70
					})
		}, {
			header : '备注',
			id : 'memo',
			dataIndex : 'memo',
			menuDisabled : true,
			editor : new Ext.form.TextField({
						maxLength : 200
					})
		}]);

cm_org.defaultSortable = false;

var window_add_org = new Ext.Window({
	title : '添加部门',
	width : 350,
	height : 440,
	resizable : false,
	autoHeight : true,
	modal : true,
	closeAction : 'hide',
	listeners : {
		'hide' : function() {
			this.setTitle('添加部门');
			this.findById('org.name').ownerCt.form.reset();
		}
	},
	items : [new Ext.FormPanel({
		labelWidth : 70,
		labelAlign : 'right',
		url : '/supervise/sys/org/saveOrg.action',
		border : false,
		baseCls : 'x-plain',
		bodyStyle : 'padding:5px 5px 0',
		anchor : '100%',
		defaults : {
			width : 233,
			msgTarget : 'side'
		},
		defaultType : 'textfield',
		items : [{
					fieldLabel : '部门名称',
					id : 'org.name',
					name : 'org.name',

					allowBlank : false,
					maxLength : 50
				}, /*
					 * { xtype : 'combo', fieldLabel : '上级部门', id : 'parentId',
					 * hiddenName : 'org.parentId', valueField : 'parentId',
					 * displayField : 'parentName', mode : 'remote', store :
					 * ds_org_select, selectOnFocus : true, editable : false,
					 * allowBlank : false, triggerAction : 'all', loadingText :
					 * '加载中...', emptyText : '公司名称', listeners : { //
					 * 获得下拉文本内容,解决id,value都要的情况 'select' : function(combo,
					 * record, index) {
					 * this.ownerCt.form.findField('org.name').setValue(record.data.companyName); } } },
					 */
				// {
				// xtype : 'combo',
				// fieldLabel : '上级部门',
				// name : 'entityOrgType',
				// hiddenName : 'org.orgType',
				// valueField : 'retrunValue',
				// displayField : 'displayText',
				// mode : 'local',
				// store : new Ext.data.SimpleStore({ // 填充的数据
				// fields : ["retrunValue", "displayText"],
				// data : [['unit', '垂直管理单位'],
				// ['dept', '机关'], ['town', '乡镇'],
				// ['project', '工业园区管委会和工程建设指挥部']]
				// }),
				// selectOnFocus : true,
				// editable : false,
				// allowBlank : false,
				// triggerAction : 'all',
				// emptyText : '请选择部门类型',
				// // listeners : { // 获得下拉文本内容,解决id,value都要的情况
				// // 'select' : function() {
				// // alert(
				// this.ownerCt.form.findField('org.orgType').getValue());
				// //// .setValue(record.data.companyName);
				// // }
				// // }
				// readOnly : true
				// },
				new Ext.form.ComboBox({
							fieldLabel : '部门类型', // UI标签名称
							name : 'orgType_name', // 
							hiddenName : 'org.orgType',// 作为form提交时传送的参数
							allowBlank : false, // 是否允许为空
							mode : 'local', // 数据模式,local为本地模式
							readOnly : true, // 是否只读
							triggerAction : 'all', // 显示所有下列数.必须指定为'all'
							anchor : '90%',
							emptyText : '请选择...',
							store : new Ext.data.SimpleStore({ // 填充的数据
								fields : ["retrunValue", "displayText"],
								data : [['unit', '垂直管理单位'], ['dept', '机关'],
										['town', '乡镇'],
										['project', '工业园区管委会和工程建设指挥部']]
							}),
							valueField : 'retrunValue', // 传送的值
							displayField : 'displayText' // UI列表显示的文本
						}), {
					fieldLabel : '部门排序',
					name : 'org.orgOrder',
					maxLength : 70
				}, {
					fieldLabel : '备注',
					name : 'org.memo',
					xtype : 'textarea',
					maxLength : 200
				}],
		buttonAlign : 'right',
		minButtonWidth : 60,
		buttons : [{
			text : '添加',
			handler : function(btn) {
				var frm = this.ownerCt.form;
				if (frm.isValid()) {
					btn.disable();
					var dnfield = frm.findField('org.name');
					frm.submit({
								waitTitle : '请稍候',
								waitMsg : '正在提交表单数据,请稍候...',
								timeout : 600000,
								success : function(form, action) {
									alert(form.findField('orgType_name')
											.getValue());
									alert(form.findField('org.orgOrder')
											.getValue());
									alert(form.findField('org.memo').getValue());
									var store = grid_org.getStore();
									if (store.data.length <= 20) {
										var org = new Org({
													id : action.result.id,
													name : cnfield.getValue(),
													orgType : form
															.findField('orgType_name')
															.getValue(),
													orgOrder : form
															.findField('org.orgOrder')
															.getValue(),
													memo : form
															.findField('org.memo')
															.getValue()
												});
										store.insert(0, [org]);
										if (store.data.length > 20) {
											store.remove(store
													.getAt(store.data.length
															- 1));
										}
									}
									window_add_org.setTitle('[ '
											+ dnfield.getValue()
											+ ' ]   添加成功!!');
									frm.reset();
									btn.enable();
								},
								failure : function() {
									alert("fail");
									Ext.Msg.show({
												title : '错误提示',
												msg : '"' + dnfield.getValue()
														+ '" ' + '名称可能已经存在!',
												buttons : Ext.Msg.OK,
												fn : function() {
													dnfield.focus(true);
													btn.enable();
												},
												icon : Ext.Msg.ERROR
											});
								}
							});
				}
			}
		}, {
			text : '重置',
			handler : function() {
				this.ownerCt.form.reset();
			}
		}, {
			text : '取消',
			handler : function() {
				this.ownerCt.ownerCt.hide();
			}
		}]
	})]
});
var window_edit_org = new Ext.Window({
	title : '修改部门',
	width : 350,
	height : 440,
	resizable : false,
	autoHeight : true,
	modal : true,
	closeAction : 'hide',
	listeners : {
		'hide' : function() {
			this.setTitle('修改部门');
			this.findById('org.name').ownerCt.form.reset();
		}
	},
	items : [new Ext.FormPanel({
		labelWidth : 70,
		labelAlign : 'right',
		url : '/supervise/sys/org/saveOrg.action',
		border : false,
		baseCls : 'x-plain',
		bodyStyle : 'padding:5px 5px 0',
		anchor : '100%',
		defaults : {
			width : 233,
			msgTarget : 'side'
		},
		defaultType : 'textfield',
		items : [{
					fieldLabel : '部门名称',
					id : 'org.name',
					name : 'org.name',

					allowBlank : false,
					maxLength : 50
				},
				new Ext.form.ComboBox({
							fieldLabel : '部门类型', // UI标签名称
							name : 'orgType_name', // 
							hiddenName : 'org.orgType',// 作为form提交时传送的参数
							allowBlank : false, // 是否允许为空
							mode : 'local', // 数据模式,local为本地模式
							readOnly : true, // 是否只读
							triggerAction : 'all', // 显示所有下列数.必须指定为'all'
							anchor : '90%',
							emptyText : '请选择...',
							store : new Ext.data.SimpleStore({ // 填充的数据
								fields : ["retrunValue", "displayText"],
								data : [['unit', '垂直管理单位'], ['dept', '机关'],
										['town', '乡镇'],
										['project', '工业园区管委会和工程建设指挥部']]
							}),
							valueField : 'retrunValue', // 传送的值
							displayField : 'displayText' // UI列表显示的文本
						}), {
					fieldLabel : '部门排序',
					name : 'org.orgOrder',
					maxLength : 70
				}, {
					fieldLabel : '备注',
					name : 'org.memo',
					xtype : 'textarea',
					maxLength : 200
				}],
		buttonAlign : 'center',
		minButtonWidth : 60,
		buttons : [{
			text : '修改',
			handler : function(btn) {
				var frm = this.ownerCt.form;
				if (frm.isValid()) {
					btn.disable();
					var dnfield = frm.findField('org.name');
					frm.submit({
								waitTitle : '请稍候',
								waitMsg : '正在提交表单数据,请稍候...',
								timeout : 600000,
								success : function(form, action) {
									alert(form.findField('orgType_name')
											.getValue());
									alert(form.findField('org.orgOrder')
											.getValue());
									alert(form.findField('org.memo').getValue());
									var store = grid_org.getStore();
									if (store.data.length <= 20) {
										var org = new Org({
													id : action.result.id,
													name : cnfield.getValue(),
													orgType : form
															.findField('orgType_name')
															.getValue(),
													orgOrder : form
															.findField('org.orgOrder')
															.getValue(),
													memo : form
															.findField('org.memo')
															.getValue()
												});
										store.insert(0, [org]);
										if (store.data.length > 20) {
											store.remove(store
													.getAt(store.data.length
															- 1));
										}
									}
									window_edit_org.setTitle('[ '
											+ dnfield.getValue()
											+ ' ]   添加成功!!');
									frm.reset();
									btn.enable();
								},
								failure : function() {
									alert("fail");
									Ext.Msg.show({
												title : '错误提示',
												msg : '"' + dnfield.getValue()
														+ '" ' + '名称可能已经存在!',
												buttons : Ext.Msg.OK,
												fn : function() {
													dnfield.focus(true);
													btn.enable();
												},
												icon : Ext.Msg.ERROR
											});
								}
							});
				}
			}
		},{
			text : '取消',
			handler : function() {
				this.ownerCt.ownerCt.hide();
			}
		}]
	})]
});
var btn_add_org = new Ext.Button({
			text : '添加部门',
			iconCls : 'icon-add',
			handler : function() {
				window_add_org.show();
			}
		});
var btn_edit_org = new Ext.Button({
			text : '修改部门',
			iconCls : 'icon-edit',
			handler : function() {
				window_edit_org.show();
//				var record = grid_org.getSelectionModel().getSelected();
//	alert(record);
//	alert(window_edit_org.ownerCt.id);
//　　window_edit_org.getForm().loadRecord(record);

　//　form.buttons[0].setText('修改');
			}
		});
var btn_del_org = new Ext.Button({
	text : '删除部门',
	iconCls : 'icon-del',
	handler : function() {
		if (!grid_org.checkOne()){
			return;
		}
		var record = grid_org.getSelectionModel().getSelected();
		if (record) {
			Ext.Msg.confirm('确认删除', '你确定删除该条记录?', function(btn) {
						if (btn == 'yes') {
							Ext.Ajax.request({
										url : '/supervise/sys/org/deleteOrg.action',
										params : {
											id : record.data.id
										},
										success : function() {
											grid_org.getStore().remove(record);
										},
										failure : function() {
											Ext.Msg.show({
														title : '错误提示',
														msg : '删除时发生错误!',
														buttons : Ext.Msg.OK,
														icon : Ext.Msg.ERROR
													});
										}
									});
						}
					});
		}
	}
});

var searchOrg = function() {
	ds_org.baseParams.conditions = text_search_org.getValue();// + ',' +
	ds_org.load({
				params : {
					start : 0,
					limit : 20
				}
			});
}

var btn_search_org = new Ext.Button({
			text : '查询',
			iconCls : 'icon-search',
			handler : searchOrg
		});

var cbb_company_for_dept = new Ext.form.ComboBox({
			name : 'companyName',
			width : 120,
			displayField : 'companyName',
			mode : 'remote',
			store : ds_org_select,
			selectOnFocus : true,
			triggerAction : 'all',
			loadingText : '加载中...',
			emptyText : '公司名称'
		});

var text_search_org = new Ext.form.TextField({
			name : 'textSearchDept',
			width : 200,
			emptyText : '多条件可用逗号或者空格隔开!',
			listeners : {
				'specialkey' : function(field, e) {
					if (e.getKey() == Ext.EventObject.ENTER) {
						searchOrg();
					}
				}
			}
		});

var ds_org = new Ext.data.Store({
			proxy : new Ext.data.HttpProxy({
						url : '/supervise/sys/org/findAllOrg.action'
					}),
			reader : new Ext.data.JsonReader({
						totalProperty : 'totalProperty',
						root : 'root'
					}, [{
								name : 'id',
								type : 'int'
							}, {
								name : 'name',
								type : 'string'
							}, /*
								 * { name : 'parentId', type : 'int' }, { name :
								 * 'companyName', type : 'string' },
								 */{
								name : 'orgType',
								type : 'string'
							}, {
								name : 'orgOrder',
								type : 'int'
							}, {
								name : 'isLeaf',
								type : 'string'
							}, {
								name : 'memo',
								type : 'string'
							}])
		});

var companyId; // 存储部门修改时分公司下拉的分公司id
var grid_org = new Ext.grid.GridPanel({
			title : '部门管理',
			iconCls : 'icon-plugin',
			region : 'center',
			loadMask : {
				msg : '数据加载中...'
			},
			cm : cm_org,
			ds : ds_org,
			sm : new Ext.grid.CheckboxSelectionModel({
						singleSelect : false
					}),
			enableColumnMove : false,
			trackMouseOver : false,
			frame : true,
			autoExpandColumn : 'memo',
			clicksToEdit : 1,
			tbar : [btn_add_org, '-', btn_edit_org, '-',btn_del_org, '->', // cbb_company_for_dept,
					// '-', '&nbsp;&nbsp;',
					text_search_org, btn_search_org],
			bbar : new Ext.PagingToolbar({
						pageSize : 20,
						store : ds_org,
						displayInfo : true,
						displayMsg : '第 {0} - {1} 条  共 {2} 条',
						emptyMsg : "没有记录"
					}),
			// 检测至少选择一个
			checkOne : function() {
				var selections = this.getSelections();
				if (selections.length == 0) {
					Ext.MessageBox.alert("提示", "请选择一条的记录！");
					return false;
				} else if (selections.length != 1) {
					Ext.MessageBox.alert("提示", "不能选择多行！");
					return false;
				}
				return true;
			},

			// 检测必须选择一个
			checkMany : function() {
				var selections = this.getSelections();
				if (selections.length == 0) {
					Ext.MessageBox.alert("提示", "请至少选择一条的记录！");
					return false;
				}
				return true;
			},
			
			listeners : {
				'afteredit' : function(e) {
					Ext.Ajax.request({
								url : '/supervise/sys/org/updateOrg.action',
								params : {
									fieldName : e.field,
									fieldValue : e.value,
									// companyId : e.field == 'companyName' ?
									// companyId : null,
									id : e.record.data.id
								},
								success : function() {
									// alert("数据修改成功！");
								},
								failure : function() {
									Ext.Msg.show({
												title : '错误提示',
												msg : '修改数据发生错误,操作将被回滚!',
												fn : function() {
													e.record.set(e.field,
															e.originalValue);
												},
												buttons : Ext.Msg.OK,
												icon : Ext.Msg.ERROR
											});
								}
							});
				}
			}
		});

var p_org = {
	id : 'org-panel',
	border : false,
	layout : 'border',
	items : [grid_org]
}
